1 module hip.api.audio.audiosource;
2 
3 public import hip.api.audio.audioclip;
4 
5 abstract class AHipAudioSource
6 {
7     protected IHipAudioClip _clip;
8 
9     IHipAudioClip clip(){return _clip;}
10     IHipAudioClip clip(IHipAudioClip newClip){return _clip = newClip;}
11     
12     protected bool isDirty;
13     protected bool _loop;
14     bool isPlaying;
15     bool isPaused;
16 
17     protected float _time = 0;
18     protected float _length = -1;
19     protected float _pitch = 1;
20     protected float _panning = 0;
21     protected float _volume = 1;
22     protected float[3] _position = [0,0,0];
23 
24 
25 
26     final float length() const => _length;
27     final float time() const => _time;
28     final float pitch() const => _pitch;
29     final float panning() const => _panning;
30     final float volume() const => _volume;
31     final bool loop() const => _loop;
32 
33 
34 
35     float length(float value) => _length = value;
36     float time(float value) => _time = value;
37 
38     float pitch(float value)
39     in(value != float.nan)
40     {
41         isDirty = isDirty || pitch != value;
42         return _pitch = value;
43     }
44 
45     float panning(float value)
46     in(value >= -1 && value <= 1)
47     {
48         isDirty = isDirty || panning != value;
49         return _panning = value;
50     }
51     float volume(float value)
52     in(value != float.nan)
53     {
54         isDirty = isDirty || pitch != value;
55         return _volume = value;
56     }
57 
58     float[3] position() => _position;
59     float[3] position(float[3] value)
60     {
61         isDirty = isDirty || position != value;
62         return _position = value;
63     }
64 
65     bool loop(bool value)
66     {
67         isDirty = isDirty || _loop != value;
68         return _loop = value;
69     }
70 
71     
72     bool play()
73     {
74         isPlaying = true;
75         return false;
76     }
77     bool stop()
78     {
79         isPlaying = false;
80         return false;
81     }
82     bool pause()
83     {
84         isPaused = true;
85         return false;
86     }
87     bool play_streamed() => false;
88 
89 
90     abstract float getProgress();
91     abstract AHipAudioSource clean();
92     abstract void pullStreamData();
93     abstract void* getFreeBuffer();
94 
95 
96     
97 
98 
99     //3D Audio Only
100     float maxDistance = 0;
101     float rolloffFactor = 0;
102     float referenceDistance = 0;
103 }